package com.itheima.controller;

import com.github.pagehelper.Page;
import com.itheima.pojo.Emp;
import com.itheima.pojo.PageBeen;
import com.itheima.pojo.Result;
import com.itheima.service.EmpService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.*;

import java.time.LocalDate;
import java.util.List;

/**
 * 员工管理Controller
 */
@RestController
@RequestMapping("/emps")
@Slf4j
public class EmpController {
    @Autowired
    private EmpService empService;
    /*
        基于页面原型，继续分析，得出以下结论：
     1. 前端在请求服务端时，传递的参数
        当前页码  page
        每页显示条数  pageSize

     2. 后端需要响应什么数据给前端  后台给前端返回的数据包含：List集合(数据列表)、total(总记录数)
        而这两部分我们通常封装到PageBean对象中，并将该对象转换为json格式的数据响应回给浏览器
        所查询到的数据列表  rows（存储到List 集合中）
        总记录数     total
     */

    @GetMapping
    public Result page(
            //@RequestParam 是以防请求参数名和controller方法中的形参名不相同
            @RequestParam(defaultValue = "1") Integer page, //当前页码  page
            @RequestParam(defaultValue = "10") Integer pageSize,// 每页显示条数  pageSize
                String name,
                Short  gender,
            @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate begin,
            @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate end) {
        log.info("分页查询,参数:{}, {}", page, pageSize);
        //调用业务层分页查询功能
        PageBeen pagebeen = empService.sletepage(page, pageSize, name, gender, begin, end);
        return Result.success(pagebeen);
    }

    @PostMapping
    public  Result add(@RequestBody Emp emp){
        log.info("添加员工信息:{}", emp);
        empService.add(emp);
        return Result.success();
    }

    @GetMapping("/{id}")
    public Result getById(@PathVariable Integer id){
        log.info("查询员工数据: {}",id);
       Emp emp = empService.getById(id);
       return Result.success(emp);
    }

    @PutMapping()
    public Result update(@RequestBody Emp emp) {
        log.info("修改员工信息: {}", emp);
        empService.update(emp);
        return Result.success();

    }
    @DeleteMapping("{id}")
    public Result deleteById(@PathVariable Integer id){
        log.info("删除员工: {}" , id);
        empService.daleteById(id);
        return Result.success();

    }



//    --------------------------------------------------------------------------------------------------------------------------
////    增
//    @PostMapping
//    public Result add(@RequestBody Emp emp){
//        log.info("添加员工: {}",emp);
//        empService.addemp(emp);
//        return Result.success();
//    }
////    删
//    @DeleteMapping
//
////    改
//    @PutMapping
//
////    查

//    获取请求路径参数
}
